/*
*********************************************************************************************************
*
* 模块名称 :    bsp中间件层
* 文件名称 :    bsp_middlreware.c
* 版    本 :    V1.0
* 说    明 :    所有bsp中间件汇总，介于BSP与hal层驱动之间，向上提供接口给BSP及APP层
*
* 修改记录 :
*   版本号  日期      作者      说明
*   V1.0    2025-2-18 miaozi    正式发布
*
*
*
*********************************************************************************************************
*/
#include "bsp_middleware.h"

/*
*********************************************************************************************************
* 函 数 名: UartSend
* 功能说明: 填写数据到UART发送缓冲区,并启动发送中断。中断处理函数发送完毕后，自动关闭发送中断
* 形    参:  串口设备、数据缓冲区、数据长度-以字节为单位
* 返 回 值: 无
*********************************************************************************************************
*/
void UartSend(UART_T *_pUart, uint8_t *_ucaBuf, uint16_t _usLen)
{
  uint32_t i;

  //  step1:把所有数据压入环形缓冲区
  for (i = 0; i < _usLen; i++)
  {
    while(1)
    {
      if(_pUart->FIFO_IsFull(_pUart->pTxFifo))                          //  如果发送缓冲区满了
      {
        if((__HAL_UART_GET_FLAG(_pUart->g_uart, UART_IT_TC)) == RESET)  //  串口发送是空闲的
        {
          __HAL_UART_ENABLE_IT(_pUart->g_uart,UART_IT_TC);              //  置位串口中断
        }
      }
      else
      {
        break;  // 如果发送缓冲区未满，则退出while
      }
    }

    _pUart->FIFO_Write(_pUart->pTxFifo,_ucaBuf[i]);     //  压入缓冲区
  }

  //  step2：启动串口中断，在中断读环形缓冲区
  __HAL_UART_ENABLE_IT(_pUart->g_uart, UART_IT_TC);     //  置位串口发送完成中断

  return;
}


/*
*********************************************************************************************************
* 函 数 名: UartDmaSend
* 功能说明:
* 形    参:
* 返 回 值: 无
*********************************************************************************************************
*/
void UartDmaSend(UART_T *_pUart, uint8_t *_ucaBuf, uint16_t _usLen)
{
  HAL_UART_Transmit_DMA(_pUart->g_uart,_ucaBuf,_usLen);
  return;
}
/***************************** LinkJoin(END OF FILE) *********************************/
